"""
一到多的查询
product.review_set

多到一的查询
直接通过字段访问 review.product
"""

from product.models import Product,Review
from django.http import HttpResponse
from django.db.models import Count,Avg,Max,Min,Sum

# 获取产品及其所有评论
def get_product_review(request):
    # 一到多查询
    product = Product.objects.get(id=1)
    reviews = product.review_set.all()  # 获取产品id=1的评论
    # print(reviews)
    
    # 点赞量大于等于1
    reviews = product.review_set.filter(link_count__gte=1)
    # print(reviews)
    
    # 多到一,id=1的商品的评论
    review = Review.objects.get(id=1)
    product = review.product
    # print(f"评论所属商品:{product.product_name},价格:{product.price},库存:{product.stock}")
    
    # 查询商品名为雷神的评论数据
    # 通过 Product 模型的 product_name 字段进行查询，找到产品名称为指定值的所有评论。
    reviews = Review.objects.filter(product__product_name__contains="雷神")
    # print(reviews)
    
    # 聚合关联查询
    # 统计每个商品的评论数量，计算每条评论的平均点赞数，过滤出至少有1条评论的商品（不限制评论数就删除）,按id降序排序
    products = Product.objects.annotate(
        review_count=Count('review'),
        avg_link_count=Avg("review__link_count")).filter(review_count__gt=0).order_by('-id')
    # print(products)
    for product in products:
        
        print(f"id:{product.id}  {product.product_name}, | 评论数:{product.review_count}条 | 平均点赞数:{product.avg_link_count}")
    
    
    return HttpResponse("ok")

 
